﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FM.Common;
using FM.Events;
using FM.Services;
using FM.录音.Common;
using FM.录音.Data;
using FM.录音.Events;
using FM.录音.接口;
using Microsoft.Practices.Prism.PubSubEvents;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;
using NJT.IO;

namespace FM.录音.Services
{
    public class 系统配置服务1 : 启动基类, I系统配置服务
    {


        public static 系统配置 系统配置1;

        public static string 当前目录
        {
            get { return AppDomain.CurrentDomain.BaseDirectory; }
        }

        public static string 配置文件路径
        {
            get { return 当前目录 + Properties.Settings.Default.配置文件名称; }
        }

        public 系统配置服务1(IUnityContainer 人事部cs, IEventAggregator 新闻部cs, IRegionManager 模块cs)
            : base(人事部cs, 新闻部cs, 模块cs)
        {
        }

        public override void 启动()
        {
            if (Is启动)
            {
                return;
            }
            base.启动();
            新闻部.GetEvent<保存布局Event>().Subscribe(保存布局Action, true);
            新闻部.GetEvent<保存配置Event>().Subscribe(保存配置Action, true);

        }



        public 系统配置 配置
        {
            get
            {
                if (系统配置1 == null)
                {
                    读取(true );
                }
                return 系统配置1;

            }
            set { 系统配置1 = value; }
        }

        public 系统配置 读取(bool 读取初始值)
        {
            if (!读取初始值)
            {
                if (系统配置1 != null)
                {
                    return 系统配置1;
                }
            }


            var r = 配置文件.读出<系统配置>(配置文件路径);
            if (r.Item1)
            {
                系统配置1 = r.Item2;
            }
            else
            {
                系统配置1 = new 系统配置();
            }

            运行状态.系统配置1 = 系统配置1;

            运行状态.系统配置1.录音配置list = new List<Fm录音配置1>(运行状态.系统配置1.录音配置);
            foreach (var 录音配置1 in 运行状态.系统配置1.录音配置list)
            {
                录音配置1.定时录音任务list = new List<Fm定时任务1>(录音配置1.定时录音任务);
            }

            return 系统配置1;
        }

        public bool 写入()
        {
            var 保存结果 = 配置文件.写入(配置, 配置文件路径);
            新闻部.GetEvent<状态栏更新Event>().Publish(new 状态栏Data1(Enum状态栏.提示,
                保存结果 ? "保存成功" : "保存失败"));
            return 保存结果;
        }

        private void 保存配置Action(object obj)
        {
            配置.录音配置 = 配置.录音配置list.ToArray();
            foreach (var 录音配置1 in 配置.录音配置)
            {
                录音配置1.定时录音任务 = 录音配置1.定时录音任务list.ToArray();
            }
            写入();
        }

        private void 保存布局Action(object obj)
        {
            var win = App.Current.MainWindow;
            配置.左 = win.Left;
            配置.上 = win.Top;
            配置.高 = win.Height;
            配置.宽 = win.Width;
            写入();

        }
    }
}
